{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ROC曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from itertools import cycle\n",
    "\n",
    "from sklearn import svm, datasets\n",
    "from sklearn.metrics import roc_curve, auc\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import label_binarize\n",
    "from sklearn.multiclass import OneVsRestClassifier\n",
    "from scipy import interp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import some data to play with\n",
    "# 加载iris数据\n",
    "iris = datasets.load_iris()\n",
    "# 得到数据集(列名：萼片长度，萼片宽度，花瓣长度，花瓣宽度)\n",
    "X = iris.data\n",
    "# 得到数据的标签（3种不同类型的虹膜）\n",
    "y = iris.target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Binarize the output\n",
    "# 对标签进行二值化\n",
    "y = label_binarize(y, classes=[0, 1, 2])\n",
    "# 得到标签的数量（得到分类数量）\n",
    "n_classes = y.shape[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Add noisy features to make the problem harder\n",
    "# 得到随机数生成器\n",
    "random_state = np.random.RandomState(0)\n",
    "# n_samples为总样本数，n_features为样本特征数\n",
    "n_samples, n_features = X.shape\n",
    "# np.c_是按行连接两个矩阵，就是把两矩阵左右相加，要求行数相等，类似于pandas中的merge()\n",
    "# 将原样本进行特征值扩展为203个\n",
    "X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# shuffle and split training and test sets\n",
    "# train_test_split函数用于将矩阵随机划分为训练子集和测试子集，并返回划分好的训练集测试集样本和训练集测试集标签\n",
    "# 将数据划分了50%的训练子集和50%的测试子集\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Learn to predict each class against the other\n",
    "# svm.SVC():支持向量分类\n",
    "# kernel: 指定要在算法中使用的内核类型\n",
    "# probability: 是否启用概率估计。必须在调用fit之前启用它，并且会减慢该方法的速度\n",
    "# random_state: 伪随机数生成器的种子在对数据进行混洗以用于概率估计时使用\n",
    "classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,\n",
    "                                 random_state=random_state))\n",
    "# 训练数据，并将分类器用在X_test测试集上，得到测试集的得分\n",
    "y_score = classifier.fit(X_train, y_train).decision_function(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compute ROC curve and ROC area for each class\n",
    "fpr = dict()\n",
    "tpr = dict()\n",
    "roc_auc = dict()\n",
    "for i in range(n_classes):\n",
    "    # Compute Receiver operating characteristic\n",
    "    # fpr: 增加假阳性率，使得元素i是具有得分> =阈值[i]的假阳性预测率\n",
    "    # tpr: 增加真阳性率，使得元素i是具有得分> =阈值[i]的真实阳性预测率\n",
    "    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])\n",
    "    # 得到auc的值\n",
    "    roc_auc[i] = auc(fpr[i], tpr[i])\n",
    "\n",
    "# Compute micro-average ROC curve and ROC area\n",
    "# ravel(): 将多维数组转换为一维数组的功能\n",
    "fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y_test.ravel(), y_score.ravel())\n",
    "roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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wYPcdNNNNG7cmObNm/PLL78AcOLECVq3bk1aWlrBnISqFqm/y6qg/pKWln7a9ODB8/X111dpenqG345pgtf69esDHYKWLFky83W/fv30mWeeUVXVY8eOaY0aNXTBggWqqnr06FHt3LmzTpo0SVVV165dqzVq1NANGzaoqmpqaqpOnjw5X2NLTU09533ccsstunr16gI9Zl6sW7dOGzdurMnJybplyxatUaOGpqWled2mR48e+u9//1tVVR955BEdNWqUqqpu2LBB27Vrl7neqFGj9N133812H9m994B4PcvvXSt6ci1evJUBA+YyfXo3Wre+GIBx4zoFOCoTNPzV7UweGp+2bNmSNWvWAPDee+/RqlUrOnbsCEB0dDSTJk2ibdu23H///YwZM4YRI0ZQt25dAMLCwhgwYMAZ+zxy5AgPPvgg8fHxiAhPPvkkN998M6VKleLIkSMAzJo1i88//5wZM2Zw5513Ehsby08//UTTpk2ZPXs2q1evpmxZZ1THWrVqsXTpUkJCQujfvz/bt28H4JVXXqFVq1anHTspKYk1a9bQpInTVc6KFSsYNGgQx48fJyoqirfffps6deowY8YMvvjiC5KTkzl69Chff/01L730Eh9++CEpKSncdNNNPPXUUwB0796dHTt2kJyczEMPPcQ999zj8/XNzmeffUavXr2IiIigevXq1KpVixUrVtCyZcts109KSuLrr7/m7bffBmD9+vUMHz4cgLp167Jt2zZ2795NpUqV6N69O8OHD6dPnz7nFKMvin2i2LPnKEOHLuSdd34GYNy4ZZmJwphgkZ6ezldffcXdd98NOMVOl1122Wnr1KxZkyNHjnD48GF++eUXHn744Vz3+/TTT1OmTBnWrl0LOEUlufntt99YtGgRoaGhZGRkMHv2bO666y5++OEHqlWrRqVKlbjtttsYPHgwV111Fdu3b6dTp05s2LDhtP3Ex8fTsOGpHhDq1q3LkiVLCAsLY9GiRfzrX//i448/BmDZsmWsWbOG2NhYvvzySzZt2sSKFStQVW644QaWLFlC69ateeutt4iNjeX48eNcfvnl3HzzzZQvX/604w4ePJjFixefcV69evXiscceO23ezp07adGiReZ0lSpV2LlzZ47XZvbs2bRv357SpUsD0KRJEz755BOuuuoqVqxYwR9//EFCQgKVKlWiYcOGrFy5MtfrnR+KbaLIyFDefPNHhg1bxMGDyUREhDJyZGuGDr0y0KGZYBSgbmeOHz9O06ZN2bZtG5dddhkdOnQAnCLnnJ6OyctTM4sWLWLmzJmZ0+XKlct1m1tvvZXQ0FAAevbsyejRo7nrrruYOXMmPXv2zNzv+vXrM7c5fPgwSUlJxMTEZM7btWsXFStWzJxOTEzkjjvuYNOmTYgIqampmcs6dOhAbGwsAF9++SVffvklzZo1A5y7ok2bNtG6dWsmTpzI7NmzAdixYwebNm06I1GMHz/et4sDp9X5nOTt+r7//vun1bk89thjPPTQQzRt2pRGjRrRrFkzwsKcr+3Q0FDCw8PPuC7+UCwTxdatB7n99tn87387AOjYsSaTJ3ehVq3YAEdmTP6Kiopi9erVJCYm0q1bNyZPnszAgQNp0KABS5YsOW3dLVu2UKpUKWJiYmjQoAGrVq3KLNbJSU4Jx3Ne1mf6S5Ysmfm6ZcuWbN68mb179/Lpp58ycuRIADIyMli2bBlRUTl3hxMVFXXavh9//HGuueYaZs+ezbZt22jbtm22x1RVhg8fzr333nva/r755hsWLVrEsmXLiI6Opm3bttm2R8jLHUWVKlXYsWNH5nRCQgIXXnhhtuezf/9+VqxYkZmoAEqXLp1ZDKWqVK9e/bSGdCkpKURGRma7v/xULJ96Kl06gt9+28/555di5sybmT+/jyUJE9TKlCnDxIkTGTt2LKmpqfTp04fvv/+eRYucxqPHjx9n4MCBPProowAMHTqU5557jt9++w1wvrjHjRt3xn47duzIpEmTMqdPFj1VqlSJDRs2ZBYt5UREuOmmmxgyZAj16tXL/PWedb+rV68+Y9t69eqxefOpXpoTExOpXLkyADNmzMjxmJ06deKtt97KrEPZuXMne/bsITExkXLlyhEdHc3GjRtZvnx5ttuPHz+e1atXn/GXNUkA3HDDDcycOZOUlBS2bt3Kpk2baN68ebb7/eijj+jWrdtpX/yHDh3ixIkTALzxxhu0bt06s1hq//79VKxYMV+76shJsUkUCxZsJiXFeZSsfPlo5szpxcaN99OzZ0NrFGWKhWbNmtGkSRNmzpxJVFQUn332Gc888wx16tShUaNGXH755TzwwAMANG7cmFdeeYXevXtTr149GjZsyK5du87Y58iRIzl48CANGzakSZMmmb+0X3jhBbp160a7du244IILvMbVs2dP3n333cxiJ4CJEycSHx9P48aNqV+/PtOmTTtju7p165KYmEhSUhIAjz76KMOHD6dVq1akp6fneLyOHTty22230bJlSxo1asQtt9xCUlISnTt3Ji0tjcaNG/P444+fVrdwtho0aMDf/vY36tevT+fOnZk8eXJmsVuXLl34888/M9edOXMmvXv3Pm37DRs20KBBA+rWrcu8efOYMGFC5rLFixfTpUvBDK0g2ZWhFWZxF4nG7/A95h07Ehk4cD6ffrqRp5++hpEjW/sxOmNO2bBhA/Xq1Qt0GEFt/PjxxMTEFPq2FP7Qo0cPnn/+eerUObOniOzeeyKySlXPahS1oL2jSEvLYNy4ZdSrN5lPP91IqVLhxMZa99/GBJP77ruPiIiIQIdR4E6cOEH37t2zTRL+EJSV2cuXJ9C//+f8/PNuAG6+uR4TJnSmcuXSAY7MGJOfIiMj6du3b6DDKHDh4eH069evwI4XdInihx8SuPLKN1GFatXKMmnSdXTtekmgwzLFlLfHUI3xB39UJwRdomjevDKdOtWiWbPzGTmyNdHR/n8iwJjsREZGsn//futq3BQYdcejyO9HZot8ZfamTfsZPHgB48Z14pJLnEfrMjKUkBD7YJrAshHuTCDkNMLduVRmF9k7ipSUNF544Xuef/57UlLSiYwMY9asvwFYkjCFQokSJfJ1lDFjAsWvTz2JSGcR+VVENovIGa1RRCRCRD5wl/8gItV82e9XX22hceNpjBr1LSkp6dx1V1OmTeuW3+EbY4zBj3cUIhIKTAY6AAnAShGZo6rrPVa7GzioqrVEpBfwItDzzL2dsvVAWa699j8A1KtXgWnTulknfsYY40f+vKNoDmxW1S2qegKYCdyYZZ0bgX+7r2cB7SWXWr+Dx6KIjAzjuefasXp1f0sSxhjjZ36rzBaRW4DOqvoPd7ovcIWqPuCxzi/uOgnu9O/uOvuy7Ose4GTH8A2BX/wSdNFTAdiX61rFg12LU+xanGLX4pQ6qnpW3cz6szI7uzuDrFnJl3VQ1deA1wBEJP5sa+6DjV2LU+xanGLX4hS7FqeISPzZbuvPoqcE4CKP6SrAnzmtIyJhQBnggB9jMsYYk0f+TBQrgdoiUl1EwoFewJws68wB7nBf3wJ8rUWtYYcxxgQ5vxU9qWqaiDwALABCgbdUdZ2IjMYZ5HsO8CbwHxHZjHMn0cuHXb/mr5iLILsWp9i1OMWuxSl2LU4562tR5FpmG2OMKVhB2824McaY/GGJwhhjjFeFNlH4q/uPosiHazFERNaLyBoR+UpEgrYVYm7XwmO9W0RERSRoH4305VqIyN/c98Y6EXmvoGMsKD58RqqKyGIR+cn9nBTMGKIFTETeEpE9bhu17JaLiEx0r9MaEbnUpx2raqH7w6n8/h2oAYQDPwP1s6wzAJjmvu4FfBDouAN4La4Bot3X9xXna+GuFwMsAZYDcYGOO4Dvi9rAT0A5d/q8QMcdwGvxGnCf+7o+sC3QcfvpWrQGLgV+yWF5F2AeThu2FsAPvuy3sN5R+KX7jyIq12uhqotV9Zg7uRynzUow8uV9AfA0MAYI5v69fbkW/wQmq+pBAFXdU8AxFhRfroUCJ4e4LMOZbbqCgqouwXtbtBuBd9SxHCgrIhfktt/CmigqAzs8phPcedmuo6ppQCJQvkCiK1i+XAtPd+P8YghGuV4LEWkGXKSqnxdkYAHgy/viEuASEVkqIstFpHOBRVewfLkWo4DbRSQBmAs8WDChFTp5/T4BCu94FPnW/UcQ8Pk8ReR2IA5o49eIAsfrtRCREGA8cGdBBRRAvrwvwnCKn9ri3GV+JyINVfWQn2MraL5ci97ADFV9WURa4rTfaqiqGf4Pr1A5q+/NwnpHYd1/nOLLtUBErgVGADeoakoBxVbQcrsWMTidRn4jIttwymDnBGmFtq+fkc9UNVVVtwK/4iSOYOPLtbgb+BBAVZcBkTgdBhY3Pn2fZFVYE4V1/3FKrtfCLW6ZjpMkgrUcGnK5FqqaqKoVVLWaqlbDqa+5QVXPujO0QsyXz8inOA86ICIVcIqithRolAXDl2uxHWgPICL1cBLF3gKNsnCYA/Rzn35qASSq6q7cNiqURU/qv+4/ihwfr8VLQCngI7c+f7uq3hCwoP3Ex2tRLPh4LRYAHUVkPZAODFXV/YGL2j98vBYPA6+LyGCcopY7g/GHpYi8j1PUWMGtj3kSKAGgqtNw6me6AJuBY8BdPu03CK+VMcaYfFRYi56MMcYUEpYojDHGeGWJwhhjjFeWKIwxxnhlicIYY4xXlihMoSMi6SKy2uOvmpd1q+XUU2Yej/mN2/voz26XF3XOYh/9RaSf+/pOEbnQY9kbIlI/n+NcKSJNfdhmkIhEn+uxTfFlicIURsdVtanH37YCOm4fVW2C09nkS3ndWFWnqeo77uSdwIUey/6hquvzJcpTcU7BtzgHAZYozFmzRGGKBPfO4TsR+dH9uzKbdRqIyAr3LmSNiNR259/uMX+6iITmcrglQC132/buGAZr3b7+I9z5L8ipMUDGuvNGicgjInILTp9b/+ceM8q9E4gTkftEZIxHzHeKyKtnGecyPDp0E5GpIhIvztgTT7nzBuIkrMUistid11FElrnX8SMRKZXLcUwxZ4nCFEZRHsVOs915e4AOqnop0BOYmM12/YEJqtoU54s6we2uoSfQyp2fDvTJ5fjXA2tFJBKYAfRU1UY4PRncJyKxwE1AA1VtDDzjubGqzgLicX75N1XV4x6LZwE9PKZ7Ah+cZZydcbrpOGmEqsYBjYE2ItJYVSfi9OVzjape43blMRK41r2W8cCQXI5jirlC2YWHKfaOu1+WnkoAk9wy+XScfouyWgaMEJEqwCequklE2gOXASvd7k2icJJOdv5PRI4D23C6oa4DbFXV39zl/wbuBybhjHXxhoh8Afjcpbmq7hWRLW4/O5vcYyx195uXOEvidFfhOULZ30TkHpzP9QU4A/SsybJtC3f+Uvc44TjXzZgcWaIwRcVgYDfQBOdO+IxBiVT1PRH5AegKLBCRf+B0q/xvVR3uwzH6eHYgKCLZjm/i9i3UHKeTuV7AA0C7PJzLB8DfgI3AbFVVcb61fY4TZxS3F4DJQA8RqQ48AlyuqgdFZAZOx3dZCbBQVXvnIV5TzFnRkykqygC73PED+uL8mj6NiNQAtrjFLXNwimC+Am4RkfPcdWLF9zHFNwLVRKSWO90X+NYt0y+jqnNxKoqze/IoCafb8+x8AnTHGSPhA3denuJU1VScIqQWbrFVaeAokCgilYDrcohlOdDq5DmJSLSIZHd3ZkwmSxSmqJgC3CEiy3GKnY5ms05P4BcRWQ3UxRnycT3OF+qXIrIGWIhTLJMrVU3G6V3zIxFZC2QA03C+dD939/ctzt1OVjOAaScrs7Ps9yCwHrhYVVe48/Icp1v38TLwiKr+jDM+9jrgLZzirJNeA+aJyGJV3YvzRNb77nGW41wrY3JkvccaY4zxyu4ojDHGeGWJwhhjjFeWKIwxxnhlicIYY4xXliiMMcZ4ZYnCGGOMV5YojDHGePX/rfOCc86E4eAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "lw = 2\n",
    "plt.plot(fpr[2], tpr[2], color='darkorange',\n",
    "         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])\n",
    "# 画一条虚线\n",
    "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n",
    "# x轴的定义域\n",
    "plt.xlim([0.0, 1.0])\n",
    "# y轴的值域\n",
    "plt.ylim([0.0, 1.05])\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.title('Receiver operating characteristic example')\n",
    "# 设置图示的位置\n",
    "plt.legend(loc=\"lower right\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
